home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 46 / Amiga Format CD46 (1999-10-20)(Future Publishing)(GB)[!][issue 1999-12].iso / -in_the_mag- / reader_requests / scilab / tests / macro.tst < prev    next >
Text File  |  1999-09-16  |  13KB  |  579 lines

  1. // simple
  2. //
  3. deff('[x,y]=t1(a,b)','x=a+b,y=a-b')
  4. [u,v]=t1(1,2);
  5. if u<> 3 then pause,end
  6. if v<>-1 then pause,end
  7. //
  8. //with arguments
  9. b=2;
  10. if t1(1)<>t1(1,2) then pause,end
  11. t2=t1;
  12. //
  13. //compile
  14. comp(t1)
  15. [u,v]=t1(1,2);
  16. if u<> 3 then pause,end
  17. if v<>-1 then pause,end
  18. b=2;
  19. if t1(1)<>t1(1,2) then pause,end
  20. //
  21. //resume
  22. //
  23. deff('[x,y]=t3(a,b)','x=a+b,y=a-b,z=resume(a*a)')
  24. [u,v]=t3(1,2);
  25. if u<> 3 then pause,end
  26. if v<>-1 then pause,end
  27. if z<>1 then pause,end
  28. b=2;
  29. clear z
  30. if t3(1)<>t3(1,2) then pause,end
  31. if z<>1 then pause,end
  32. t4=t3;
  33. //compiled
  34. comp(t3)
  35. [u,v]=t3(1,2);
  36. if u<> 3 then pause,end
  37. if v<>-1 then pause,end
  38. if z<>1 then pause,end
  39. clear z
  40. b=2;
  41. if t3(1)<>t3(1,2) then pause,end
  42. if z<>1 then pause,end
  43. //
  44. // macro + clauses
  45. //
  46. text = ['if n>0 then x=1'
  47.                                 'y=0;for k=1:n,y=y+k,end'
  48.                             'else x=-1'
  49.                                  'if n=4 then y=''yes'' '
  50.                                          'else y=''no'' '
  51.                                  'end'
  52.                     'end'
  53.                    'if n=-1 then return,end'
  54.                    'if n=-2 then tt=resume(n),end'
  55.                     'select x,'
  56.                     'case 1 then x=''pos'' ,tt=resume(''ok''),'
  57.                     'case -1 then x=''neg'' ,'
  58.                     'end'];
  59. //
  60. deff('[x,y]=t5(n)',text)
  61. [u,v]=t5(5);
  62. if u<>'pos' then pause,end
  63. if v<>15 then pause,end
  64. if tt<>'ok' then pause,end
  65. clear tt
  66. [u,v]=t5(-1);
  67. if u<>-1 then pause,end
  68. if v<>'no' then pause,end
  69. if exists('tt')=1 then pause,end
  70. clear tt v
  71. u=t5(-2);
  72. if u<>-1 then pause,end
  73. if tt<>-2 then pause,end
  74. clear tt
  75. u=t5(-4);
  76. if u<>'neg' then pause,end
  77. if exists('tt')=1 then pause,end
  78. // en compile maintenant
  79. clear u v tt
  80. comp(t5)
  81. [u,v]=t5(5);
  82. if u<>'pos' then pause,end
  83. if v<>15 then pause,end
  84. if tt<>'ok' then pause,end
  85. clear tt
  86. [u,v]=t5(-1);
  87. if u<>-1 then pause,end
  88. if v<>'no' then pause,end
  89. if exists('tt')=1 then pause,end
  90. clear tt v
  91. u=t5(-2);
  92. if u<>-1 then pause,end
  93. if tt<>-2 then pause,end
  94. clear tt
  95. u=t5(-4);
  96. if u<>'neg' then pause,end
  97. if exists('tt')=1 then pause,end
  98. //
  99. // complex clauses
  100. //
  101. text = ['if n>0 then x=1'
  102.                                 'y=0;for k=1:b(n),y=y+b(k),end'
  103.                             'else x=-1'
  104.                                  'if n=4 then y=b(''yes'') '
  105.                                          'else y=b(''no'') '
  106.                                  'end'
  107.                     'end'
  108.                    'if n=b(-1) then return,end'
  109.                    'if n=b(-2) then tt=resume(b(n)),end'
  110.                     'select x,'
  111.                     'case 1 then x=b(''pos'') ,tt=resume(b(''ok'')),'
  112.                     'case b(-1) then x=b(''neg'') ,'
  113.                     'end'];
  114. deff('[x]=b(a)','x=a,prod([1 1])')
  115. deff('[x,y]=t5(n)',text)
  116. [u,v]=t5(5);
  117. if u<>'pos' then pause,end
  118. if v<>15 then pause,end
  119. if tt<>'ok' then pause,end
  120. clear tt
  121. [u,v]=t5(-1);
  122. if u<>-1 then pause,end
  123. if v<>'no' then pause,end
  124. if exists('tt')=1 then pause,end
  125. clear tt v
  126. u=t5(-2);
  127. if u<>-1 then pause,end
  128. if tt<>-2 then pause,end
  129. clear tt
  130. u=t5(-4);
  131. if u<>'neg' then pause,end
  132. if exists('tt')=1 then pause,end
  133. // en compile maintenant
  134. clear u v tt
  135. comp(t5)
  136. [u,v]=t5(5);
  137. if u<>'pos' then pause,end
  138. if v<>15 then pause,end
  139. if tt<>'ok' then pause,end
  140. clear tt
  141. [u,v]=t5(-1);
  142. if u<>-1 then pause,end
  143. if v<>'no' then pause,end
  144. if exists('tt')=1 then pause,end
  145. clear tt v
  146. u=t5(-2);
  147. if u<>-1 then pause,end
  148. if tt<>-2 then pause,end
  149. clear tt
  150. u=t5(-4);
  151. if u<>'neg' then pause,end
  152. if exists('tt')=1 then pause,end
  153. //compiled b
  154. comp(b)
  155. deff('[x,y]=t5(n)',text)
  156. [u,v]=t5(5);
  157. if u<>'pos' then pause,end
  158. if v<>15 then pause,end
  159. if tt<>'ok' then pause,end
  160. clear tt
  161. [u,v]=t5(-1);
  162. if u<>-1 then pause,end
  163. if v<>'no' then pause,end
  164. if exists('tt')=1 then pause,end
  165. clear tt v
  166. u=t5(-2);
  167. if u<>-1 then pause,end
  168. if tt<>-2 then pause,end
  169. clear tt
  170. u=t5(-4);
  171. if u<>'neg' then pause,end
  172. if exists('tt')=1 then pause,end
  173. // 
  174. clear u v tt
  175. comp(t5)
  176. [u,v]=t5(5);
  177. if u<>'pos' then pause,end
  178. if v<>15 then pause,end
  179. if tt<>'ok' then pause,end
  180. clear tt
  181. [u,v]=t5(-1);
  182. if u<>-1 then pause,end
  183. if v<>'no' then pause,end
  184. if exists('tt')=1 then pause,end
  185. clear tt v
  186. u=t5(-2);
  187. if u<>-1 then pause,end
  188. if tt<>-2 then pause,end
  189. clear tt
  190. u=t5(-4);
  191. if u<>'neg' then pause,end
  192. if exists('tt')=1 then pause,end
  193. //more complex
  194. deff('[x]=b(a)','if a=1 then x=1,else x=a,prod([1 1]),end')
  195. //
  196. deff('[x,y]=t5(n)',text)
  197. [u,v]=t5(5);
  198. if u<>'pos' then pause,end
  199. if v<>15 then pause,end
  200. if tt<>'ok' then pause,end
  201. clear tt
  202. [u,v]=t5(-1);
  203. if u<>-1 then pause,end
  204. if v<>'no' then pause,end
  205. if exists('tt')=1 then pause,end
  206. clear tt v
  207. u=t5(-2);
  208. if u<>-1 then pause,end
  209. if tt<>-2 then pause,end
  210. clear tt
  211. u=t5(-4);
  212. if u<>'neg' then pause,end
  213. if exists('tt')=1 then pause,end
  214. //compile
  215. clear u v tt
  216. comp(t5)
  217. [u,v]=t5(5);
  218. if u<>'pos' then pause,end
  219. if v<>15 then pause,end
  220. if tt<>'ok' then pause,end
  221. clear tt
  222. [u,v]=t5(-1);
  223. if u<>-1 then pause,end
  224. if v<>'no' then pause,end
  225. if exists('tt')=1 then pause,end
  226. clear tt v
  227. u=t5(-2);
  228. if u<>-1 then pause,end
  229. if tt<>-2 then pause,end
  230. clear tt
  231. u=t5(-4);
  232. if u<>'neg' then pause,end
  233. if exists('tt')=1 then pause,end
  234. //
  235. comp(b)
  236. deff('[x,y]=t5(n)',text)
  237. [u,v]=t5(5);
  238. if u<>'pos' then pause,end
  239. if v<>15 then pause,end
  240. if tt<>'ok' then pause,end
  241. clear tt
  242. [u,v]=t5(-1);
  243. if u<>-1 then pause,end
  244. if v<>'no' then pause,end
  245. if exists('tt')=1 then pause,end
  246. clear tt v
  247. u=t5(-2);
  248. if u<>-1 then pause,end
  249. if tt<>-2 then pause,end
  250. clear tt
  251. u=t5(-4);
  252. if u<>'neg' then pause,end
  253. if exists('tt')=1 then pause,end
  254. //
  255. clear u v tt
  256. comp(t5)
  257. [u,v]=t5(5);
  258. if u<>'pos' then pause,end
  259. if v<>15 then pause,end
  260. if tt<>'ok' then pause,end
  261. clear tt
  262. [u,v]=t5(-1);
  263. if u<>-1 then pause,end
  264. if v<>'no' then pause,end
  265. if exists('tt')=1 then pause,end
  266. clear tt v
  267. u=t5(-2);
  268. if u<>-1 then pause,end
  269. if tt<>-2 then pause,end
  270. clear tt
  271. u=t5(-4);
  272. if u<>'neg' then pause,end
  273. if exists('tt')=1 then pause,end
  274. // resume
  275. deff('[]=t6(a)','x=resume(a)')
  276. clear ans x
  277. t6(15)
  278. if x<>15 then pause,end
  279. if exists('ans')=1 then pause,end
  280. //
  281. comp(t6)
  282. clear ans x
  283. t6(15)
  284. if x<>15 then pause,end
  285. if exists('ans')=1 then pause,end
  286. //
  287. //
  288. //
  289. deff('[ydot]=simul(t,y,a)','ydot=a')
  290. a=2;
  291. //appel le plus imple
  292. y=ode(0,0,1:2,simul)
  293. if norm(y-[a 2*a]) >1000*%eps then pause,end
  294. //idem en compile
  295. comp(simul)
  296. y=ode(0,0,1:2,simul)
  297. if norm(y-[a 2*a]) >1000*%eps then pause,end
  298. //appel avec passage d'arguments supplementaires
  299. deff('[ydot]=simul(t,y,a)','ydot=a')
  300. y=ode(0,0,1:2,list(simul,a))
  301. if norm(y-[a 2*a]) >1000*%eps then pause,end
  302. //idem en compile
  303. comp(simul)
  304. y=ode(0,0,1:2,list(simul,a))
  305. if norm(y-[a 2*a]) >1000*%eps then pause,end
  306. //
  307. //non linear
  308. //
  309. text=['for k=1:n,'
  310.      'y=ode(a*(k-1),k-1,k,simul),'
  311.      'x=[x,y],'
  312.      'end'];
  313. //
  314. deff('[x]=calcul(n)',text)
  315. deff('[ydot]=simul(t,y,a)','ydot=a')
  316. x=[];
  317. x=calcul(3);
  318. if norm(x-a*[1 2 3])>1000*%eps then pause,end
  319. comp(simul)
  320. x=[];
  321. x=calcul(3);
  322. if norm(x-a*[1 2 3])>1000*%eps then pause,end
  323. comp(calcul)
  324. x=[];
  325. x=calcul(3);
  326. if norm(x-a*[1 2 3])>1000*%eps then pause,end
  327. deff('[ydot]=simul(t,y,a)','ydot=a')
  328. x=[];
  329. x=calcul(3);
  330. if norm(x-a*[1 2 3])>1000*%eps then pause,end
  331. //
  332. text(2)='y=ode(a*(k-1),k-1,k,list(simul,a)),';
  333. deff('[x]=calcul(n)',text)
  334. deff('[ydot]=simul(t,y,a)','ydot=a')
  335. x=[];
  336. x=calcul(3);
  337. if norm(x-a*[1 2 3])>1000*%eps then pause,end
  338. comp(simul)
  339. x=[];
  340. x=calcul(3);
  341. if norm(x-a*[1 2 3])>1000*%eps then pause,end
  342. comp(calcul)
  343. x=[];
  344. x=calcul(3);
  345. if norm(x-a*[1 2 3])>1000*%eps then pause,end
  346. deff('[ydot]=simul(t,y,a)','ydot=a')
  347. x=[];
  348. x=calcul(3);
  349. if norm(x-a*[1 2 3])>1000*%eps then pause,end
  350. //resume in external
  351. deff('[ydot]=simul(t,y,a)','ydot=a,tt=resume([tt,t])')
  352. tt=[]
  353. deff('[x]=calcul(n)',text)
  354. deff('[ydot]=simul(t,y,a)','ydot=a')
  355. x=[];
  356. x=calcul(3);
  357. if norm(x-a*[1 2 3])>1000*%eps then pause,end
  358. comp(simul)
  359. x=[];
  360. x=calcul(3);
  361. if norm(x-a*[1 2 3])>1000*%eps then pause,end
  362. comp(calcul)
  363. x=[];
  364. x=calcul(3);
  365. if norm(x-a*[1 2 3])>1000*%eps then pause,end
  366. deff('[ydot]=simul(t,y,a)','ydot=a')
  367. x=[];
  368. x=calcul(3);
  369. if norm(x-a*[1 2 3])>1000*%eps then pause,end
  370. //
  371. //external calls a macro
  372. //
  373. deff('[x]=b(a)','if a=1 then x=a,prod([1 1]),else x=a,prod([1 1]),end')
  374. text=['for k=1:n,'
  375.      'y=ode(a*(k-1),k-1,k,simul),'
  376.      'x=[x,y],'
  377.      'end'];
  378. //
  379. deff('[x]=calcul(n)',text)
  380. deff('[ydot]=simul(t,y,a)','ydot=b(a)')
  381. x=[];
  382. x=calcul(3);
  383. if norm(x-a*[1 2 3])>1000*%eps then pause,end
  384. comp(simul)
  385. x=[];
  386. x=calcul(3);
  387. if norm(x-a*[1 2 3])>1000*%eps then pause,end
  388. comp(calcul)
  389. x=[];
  390. x=calcul(3);
  391. if norm(x-a*[1 2 3])>1000*%eps then pause,end
  392. deff('[ydot]=simul(t,y,a)','ydot=b(a)')
  393. x=[];
  394. x=calcul(3);
  395. if norm(x-a*[1 2 3])>1000*%eps then pause,end
  396. //
  397. text(2)='y=ode(a*(k-1),k-1,k,list(simul,a)),';
  398. deff('[x]=calcul(n)',text)
  399. deff('[ydot]=simul(t,y,a)','ydot=b(a)')
  400. x=[];
  401. x=calcul(3);
  402. if norm(x-a*[1 2 3])>1000*%eps then pause,end
  403. comp(simul)
  404. x=[];
  405. x=calcul(3);
  406. if norm(x-a*[1 2 3])>1000*%eps then pause,end
  407. comp(calcul)
  408. x=[];
  409. x=calcul(3);
  410. if norm(x-a*[1 2 3])>1000*%eps then pause,end
  411. deff('[ydot]=simul(t,y,a)','ydot=b(a)')
  412. x=[];
  413. x=calcul(3);
  414. if norm(x-a*[1 2 3])>1000*%eps then pause,end
  415. //
  416. deff('[ydot]=simul(t,y,a)','ydot=b(a),tt=resume([tt,t])')
  417. tt=[]
  418. deff('[x]=calcul(n)',text)
  419. deff('[ydot]=simul(t,y,a)','ydot=b(a)')
  420. x=[];
  421. x=calcul(3);
  422. if norm(x-a*[1 2 3])>1000*%eps then pause,end
  423. comp(simul)
  424. x=[];
  425. x=calcul(3);
  426. if norm(x-a*[1 2 3])>1000*%eps then pause,end
  427. comp(calcul)
  428. x=[];
  429. x=calcul(3);
  430. if norm(x-a*[1 2 3])>1000*%eps then pause,end
  431. deff('[ydot]=simul(t,y,a)','ydot=b(a)')
  432. x=[];
  433. x=calcul(3);
  434. if norm(x-a*[1 2 3])>1000*%eps then pause,end
  435. comp(b)
  436. text=['for k=1:n,'
  437.      'y=ode(a*(k-1),k-1,k,simul),'
  438.      'x=[x,y],'
  439.      'end'];
  440. //
  441. deff('[x]=calcul(n)',text)
  442. deff('[ydot]=simul(t,y,a)','ydot=b(a)')
  443. x=[];
  444. x=calcul(3);
  445. if norm(x-a*[1 2 3])>1000*%eps then pause,end
  446. comp(simul)
  447. x=[];
  448. x=calcul(3);
  449. if norm(x-a*[1 2 3])>1000*%eps then pause,end
  450. comp(calcul)
  451. x=[];
  452. x=calcul(3);
  453. if norm(x-a*[1 2 3])>1000*%eps then pause,end
  454. deff('[ydot]=simul(t,y,a)','ydot=b(a)')
  455. x=[];
  456. x=calcul(3);
  457. if norm(x-a*[1 2 3])>1000*%eps then pause,end
  458. //
  459. text(2)='y=ode(a*(k-1),k-1,k,list(simul,a)),';
  460. deff('[x]=calcul(n)',text)
  461. deff('[ydot]=simul(t,y,a)','ydot=b(a)')
  462. x=[];
  463. x=calcul(3);
  464. if norm(x-a*[1 2 3])>1000*%eps then pause,end
  465. comp(simul)
  466. x=[];
  467. x=calcul(3);
  468. if norm(x-a*[1 2 3])>1000*%eps then pause,end
  469. comp(calcul)
  470. x=[];
  471. x=calcul(3);
  472. if norm(x-a*[1 2 3])>1000*%eps then pause,end
  473. deff('[ydot]=simul(t,y,a)','ydot=b(a)')
  474. x=[];
  475. x=calcul(3);
  476. if norm(x-a*[1 2 3])>1000*%eps then pause,end
  477. //
  478. deff('[ydot]=simul(t,y,a)','ydot=b(a),tt=resume([tt,t])')
  479. tt=[]
  480. deff('[x]=calcul(n)',text)
  481. deff('[ydot]=simul(t,y,a)','ydot=b(a)')
  482. x=[];
  483. x=calcul(3);
  484. if norm(x-a*[1 2 3])>1000*%eps then pause,end
  485. comp(simul)
  486. x=[];
  487. x=calcul(3);
  488. if norm(x-a*[1 2 3])>1000*%eps then pause,end
  489. comp(calcul)
  490. x=[];
  491. x=calcul(3);
  492. if norm(x-a*[1 2 3])>1000*%eps then pause,end
  493. deff('[ydot]=simul(t,y,a)','ydot=b(a)')
  494. x=[];
  495. x=calcul(3);
  496. if norm(x-a*[1 2 3])>1000*%eps then pause,end
  497. //
  498. //macro defining ,compiling and executing a macro
  499. //
  500. text=['deff(''[x]=b(a)'',''if a=1 then x=1,else x=a,prod([1 1]),end''),'
  501.       'comp(b),'
  502.       'x=b(n),']
  503. deff('[x]=t8(n)',text')
  504. y=t8(10);
  505. if y<>10 then pause,end
  506. comp(t8)
  507. y=t8(10);
  508. if y<>10 then pause,end
  509. //
  510. //
  511. s=poly(0,'s');z=poly(0,'z');
  512. deff('[ok]=cplist(l1,l2)',['ok=1;'
  513.                  'if size(l1)<>size(l2) then ok=0,return,end'
  514.                  'for k=1:size(l1),'
  515.                     'if l1(k)<>l2(k) then ok=0,return,end;'
  516.                  'end'])
  517. deff('[r]=horner(p,x)',['if type(p)==15|type(p)==16 then';
  518.                            'r=horner(p(2),x)./horner(p(3),x),';
  519.                            'return,';
  520.                         'end;';
  521.                         'd=maxi(degree(p));';
  522.                         'r=coeff(p,d);';
  523.                         'for k=1:d,';
  524.                           'r=r*x+coeff(p,d-k)*eye;';
  525.                         'end;'])
  526. deff('[f]=%prp(p1,p2)',['[l,c]=size(p2);';
  527.                         'if l*c <>1 then f=p1*invr(p2),return,end;';
  528.                         '[l,c]=size(p1);';
  529.                         '[p1 p2]=simp(p1,p2*ones(l,c));';
  530.                         'f=tlist(''r'',p1,p2,[]);'])
  531.  
  532.  
  533.  
  534. horn=horner;
  535. h=1/s;
  536. if cplist(h,tlist('r',1,s,[]))=0 then pause,end
  537. h1=(z-1)/(z+1);
  538. hrn=horner(h,h1);
  539. if cplist(hrn , tlist('r',z+1,z-1,[]))=0 then pause,end
  540. //
  541. comp(horner)
  542. hrn=horner(h,h1);
  543. if cplist(hrn , tlist('r',z+1,z-1,[]))=0 then pause,end
  544. //
  545. comp(%prp);
  546. h=1/s;
  547. if cplist(h,tlist('r',1,s,[]))=0 then pause,end
  548. h1=(z-1)/(z+1);
  549. hrn=horn(h,h1);
  550. if cplist(hrn , tlist('r',z+1,z-1,[]))=0 then pause,end
  551. //
  552. comp(horn)
  553. hrn=horn(h,h1);
  554. if cplist(hrn , tlist('r',z+1,z-1,[]))=0 then pause,end
  555. //
  556. //
  557. //
  558. text=['aa=1,if a=2 then aa=b(a),end']
  559. fic=file('open','test_macro_exec','unknown')
  560. write(fic,text)
  561. file('close',fic)
  562. deff('[x]=b(a)','x=a,prod([1 1])')
  563. deff('[x]=t9(a)','exec(''test_macro_exec''),x=aa')
  564. y=t9(2)
  565. if y<>2 then pause,end
  566. file('rewind',fic)
  567. comp(t9)
  568. y=t9(2)
  569. if y<>2 then pause,end
  570. //
  571. comp(b)
  572. deff('[x]=t9(a)','exec(''test_macro_exec''),x=aa')
  573. y=t9(2)
  574. if y<>2 then pause,end
  575. comp(t9)
  576. y=t9(2)
  577. if y<>2 then pause,end
  578.  
  579.